package br.com.peri.rs.bean;

import java.lang.reflect.Type;
import java.util.List;

import javax.ejb.Stateless;
import javax.inject.Inject;

import br.com.peri.StatusDigitalUsuarioPlano;
import br.com.peri.Usuario;
import br.com.peri.enums.StatusPeriResponse;
import br.com.peri.exception.PeriWsException;
import br.com.peri.facade.PeriFacade;
import br.com.peri.rs.UsuarioResource;
import br.com.peri.vo.PeriResponse;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

@Stateless
public class UsuarioResourceBean implements UsuarioResource {

	private static final long serialVersionUID = 1L;

	@Inject
	private PeriFacade periFacade;

	@Override
	public String getStatusDigitalUsuarioPlano(String cpfCnpj) {
		StatusDigitalUsuarioPlano status = periFacade
				.getStatusDigitalUsuarioPlano(cpfCnpj);
		return new Gson().toJson(status);
	}

	@Override
	public String salvarUsuario(String jsonUsuario) {
		Gson gson = new Gson();
		Usuario usuario = gson.fromJson(jsonUsuario, Usuario.class);
		PeriResponse<Usuario> retorno = new PeriResponse<Usuario>();
		try {
			usuario = periFacade.salvarUsuario(usuario);
			retorno.setObjeto(usuario);
			retorno.setStatus(StatusPeriResponse.SUCESSO);
		} catch (PeriWsException e) {
			retorno.setMensagens(e.getMessages());
			retorno.setStatus(StatusPeriResponse.ERRO);
		}
		Type type = new TypeToken<PeriResponse<Usuario>>() {
		}.getType();
		return new Gson().toJson(retorno, type);
	}

	@Override
	public String atualizarUsuario(String jsonUsuario) {
		Gson gson = new Gson();
		Usuario usuario = gson.fromJson(jsonUsuario, Usuario.class);
		PeriResponse<Usuario> retorno = new PeriResponse<Usuario>();
		try {
			usuario = periFacade.atualizarUsuario(usuario);
			retorno.setObjeto(usuario);
			retorno.setStatus(StatusPeriResponse.SUCESSO);
		} catch (PeriWsException e) {
			retorno.setMensagens(e.getMessages());
			retorno.setStatus(StatusPeriResponse.ERRO);
		}
		Type type = new TypeToken<PeriResponse<Usuario>>() {
		}.getType();
		return new Gson().toJson(retorno, type);
	}

	@Override
	public String excluirUsuario(Long id) {
		PeriResponse<Usuario> retorno = new PeriResponse<Usuario>();
		try {
			periFacade.excluirUsuario(id);
			retorno.setStatus(StatusPeriResponse.SUCESSO);
		} catch (PeriWsException e) {
			retorno.setMensagens(e.getMessages());
			retorno.setStatus(StatusPeriResponse.ERRO);
		}
		Type type = new TypeToken<PeriResponse<Usuario>>() {
		}.getType();
		return new Gson().toJson(retorno, type);
	}

	@Override
	public String getUsuarioPorId(Long id) {
		Usuario usuario = periFacade.getUsuarioPorId(id);
		return new Gson().toJson(usuario);
	}

	@Override
	public String listarTodosUsuarios() {
		List<Usuario> usuarios = periFacade.listarTodosUsuarios();
		Type type = new TypeToken<List<Usuario>>() {
		}.getType();
		return new Gson().toJson(usuarios, type);
	}
}
